#include <bits/stdc++.h>
using namespace std;

using i64 = long long;
using pii = pair<int, int>;
const int N = 310, P = 1e9 + 7;

int dp[N][N], tmp[N][N];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;

    vector<pii> v(n);
    for(auto &[l, r] : v)
        cin >> l >> r;

    reverse(v.begin(), v.end());

    dp[0][0] = 1;

    for(auto &[l, r] : v) {
        memset(tmp, 0, sizeof tmp);
        for(int i = l; i <= r; i ++) {
            if(i == 0) {
                for(int j = 0; j < n; j ++)
                    for(int k = 0; k <= n; k ++)
                        (tmp[j + 1][k] += dp[j][k]) %= P;
                
                for(int j = 1; j <= n; j ++)
                    for(int k = 1; k <= n; k ++)
                        tmp[j][k - 1] = (tmp[j][k - 1] + (i64)dp[j][k] * k) % P;
            }else if(i == 1) {
                for(int j = 1; j <= n; j ++)
                    for(int k = 0; k <= n; k ++)
                        tmp[j][k] = (tmp[j][k] + 2ll * dp[j][k] * j) % P;
                
                for(int j = 2; j <= n; j ++)
                    for(int k = 1; k <= n; k ++)
                        tmp[j - 1][k - 1] = (tmp[j - 1][k - 1] + 2ll * dp[j][k] * (j - 1) * k) % P;
            }else if(i == 2) {
                for(int j = 1; j <= n; j ++)
                    for(int k = 0; k < n; k ++)
                        tmp[j][k + 1] = (tmp[j][k + 1] + 2ll * dp[j][k] * j) % P;
                
                for(int j = 2; j <= n; j ++)
                    for(int k = 1; k <= n; k ++)
                        tmp[j - 1][k] = (tmp[j - 1][k] + 2ll * dp[j][k] * (j - 1) * k) % P;
                
                for(int j = 2; j <= n; j ++)
                    for(int k = 0; k <= n; k ++)
                        tmp[j - 1][k] = (tmp[j - 1][k] + (j - 1ll) * dp[j][k] * j) % P;
                
                for(int j = 3; j <= n; j ++)
                    for(int k = 1; k <= n; k ++)
                        tmp[j - 2][k - 1] = (tmp[j - 2][k - 1] + (j - 1ll) * (j - 2ll) * dp[j][k] * k) % P;
            }
        }
        swap(dp, tmp);
        //for(int i = 0; i <= n; i ++)
        //    for(int j = 0; j <= n; j ++)
        //        cout << dp[i][j] << " \n"[j == n];
        //cout << "\n";
    }
    cout << dp[1][0] << "\n";

}